#ifndef __TIMERMANAGER_H__
#define __TIMERMANAGER_H__

#include <pthread.h>
#include <vector>
#include "TimerTask.h"
#include <mutex>

using namespace std;

class TimerManager
{
public:
    static TimerManager *getTimerManager();
   
    void start();
    void stop();
    void attach(TimerTask *task);
    void detach(TimerTask *task);

private:
    int createTimerfd();
    void setTimerfd(int initSec, int periodSec);
    void handleRead();
    void initTimer(int initSec, int periodSec);
    // 执行任务
    void processTasks();
    TimerManager();
    ~TimerManager();
    static void init_r();
    static void destroy();

private:
    static TimerManager *_pInstance;
    static pthread_once_t _once;

    int _timerfd;    // 定时器文件描述符
    int _initSec;    // 初始时间
    int _periodSec;  // 超时时间
    mutex _mutex;
    bool _isStarted;
    vector<TimerTask*> _wheelList;  // 任务列表
};

#endif